home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / HARDWARE.SWG / 0015_AT Extended BIOS ??.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  2KB  |  80 lines

  1. {
  2. KAI ROHRBACHER
  3.  
  4.   As  promised,  here  is  some  TP-code  to  check whether your machine
  5.   supports  the  extended timing services of the AT's-BIOS: if all works
  6.   fine,  the  Program should give two beeps, the 2nd exactly 5secs after
  7.   the 1st one -and then terminate.
  8.  
  9.   (To  all  others  reading  this:  this  timing  scheme  normally works
  10.   _asynchrone_ to whatever you are doing in the "foreground" Program and
  11.   thus  is  great  For  timing  events.  What's  more:  the  clock has a
  12.   resolution of some microseconds!)
  13. }
  14.  
  15. Const
  16.   WaitTime = 5000;
  17. Var
  18.   IsAT,
  19.   TimeFlag  : Byte;
  20.   CycleTime : LongInt;
  21.  
  22. Function AT : Boolean;
  23. { in: - }
  24. {out: True/False, if the machine is (at least) an AT}
  25. begin
  26.   AT := MEM[$F000 : $FFFE] = $FC;
  27. end;
  28.  
  29. Procedure SetWaitingTime(milliseconds : Word);
  30. { in: milliseconds = time to wait in ms}
  31. {out: CycleTime := that same value in microseconds}
  32. {     TimeFlag  := $80}
  33. {rem: won't work With PC's}
  34. begin
  35.   TimeFlag  := $80;
  36.   CycleTime := LongInt(milliseconds) * LongInt(1000);
  37.   if (milliseconds <> 0) and AT then
  38.     IsAT := 0      {yes, use timing mechanism}
  39.   else
  40.     IsAT := $80;   {no, don't use that extended service}
  41. end;
  42.  
  43. Procedure Wait;
  44. begin
  45.   Asm
  46.     MOV AL, IsAT
  47.     or  AL, AL
  48.     JNE @L11
  49.     MOV TimeFlag,AL
  50.     MOV DX, Word PTR CycleTime
  51.     MOV CX, Word PTR CycleTime+2
  52.     MOV BX, OFFSET TimeFlag
  53.     MOV AX, DS
  54.     MOV ES, AX
  55.     MOV AX, 8300h
  56.     INT 15h
  57.    @L11:
  58.  
  59.    @L10:
  60.     MOV AL, TimeFlag {look at bit 7: 1/0 = time over/not over}
  61.     and AL, $80
  62.     JE  @L10
  63.   end;
  64. end;
  65.  
  66. begin
  67.   if not AT then
  68.   begin
  69.     WriteLN('Sorry, this Program requires the extended BIOS-' +
  70.             'services, available on AT''s only!');
  71.     Halt(1);
  72.   end;
  73.   WriteLN('The time between the two beeps should be exactly ', WaitTime,
  74.           ' milliseconds!');
  75.   Write(#7);
  76.   SetWaitingTime(5000);
  77.   Wait;
  78.   Write(#7);
  79. end.
  80.